import 'package:logger/logger.dart';
import 'package:socket_io_client/socket_io_client.dart' as io;

class SocketService {
  var logger = Logger();

  late io.Socket _socket;
  final String _url; // 后端服务器的 WebSocket URL

  // 构造函数
  SocketService(this._url);

  // 初始化 Socket.IO 连接
  void initSocket() {
    _socket = io.io(
      _url,
      io.OptionBuilder()
          .setTransports(['websocket']) // 使用 WebSocket 作为传输协议
          .enableReconnection() // 启用自动重连
          .setReconnectionAttempts(3) // 最大重连次数
          .setReconnectionDelay(1000) // 重连延迟（毫秒）
          .setReconnectionDelayMax(5000) // 最大重连延迟（毫秒）
          .build(),
    );

    // 监听连接事件
    _socket.on('connect', (_) {
      logger.i('socket链接成功');
    });

    // 监听断开连接事件
    _socket.on('disconnect', (_) {
      logger.i('服务端发起，链接断开');
    });
  }

  // 发送消息
  void sendMessage(String event, dynamic data) {
    if (_socket.connected) {
      _socket.emit(event, data);
    } else {
      logger.e('socket 未连接');
    }
  }

  // 监听消息
  void listenToMessage(String event, Function(dynamic) callback) {
    _socket.on(event, callback);
  }

  // 断开连接
  void disconnect() {
    _socket.disconnect();
  }

  // 检查是否已连接
  bool get isConnected => _socket.connected;
}
